

#ifndef _SOCKET_H_
#define _SOCKET_H_

#include "InetAddress.hpp"
#include "noncopyable.hpp"

namespace zephyr {

class Socket : noncopyable {
  public:

    explicit Socket(int sockfd) : m_sockfd(sockfd){}
    ~Socket();

    int fd() const { return m_sockfd; }
    void bindAddress(const InetAddress &localaddr);
    void listen();
    int accept(InetAddress *peeraddr);

    // 设置半关闭
    void shutdownWrite();
    void setTcpNoDelay(bool on); // 这是Negel算法
    void setReuseAddr(bool on); // 设置地址复用
    void setReusePort(bool on); // 设置端口复用
    void setKeepAlive(bool on); // 设置长连接


  private:
    int m_sockfd;
};

}


#endif // _SOCKET_H_